package top.whysu.edevice.service.system;

import org.springframework.transaction.annotation.Transactional;
import top.whysu.edevice.dto.page.PagenationDataDTO;
import top.whysu.edevice.dto.page.PagerDTO;
import top.whysu.edevice.dto.system.AccountDTO;
import top.whysu.edevice.dto.system.AccountQueryDTO;
import top.whysu.edevice.dto.system.ModifyPwdDTO;
import top.whysu.edevice.po.system.AccountPO;

import java.math.BigDecimal;


/**
 * 账号业务接口类
 */
public interface AccountService {

	/**
	 * 新增账号
	 *
	 * @param accountDTO 账号传输对象
	 * @return 账号id
	 */
	@Transactional
	BigDecimal insertAccount(AccountDTO accountDTO);

	/**
	 * 查看账号
	 *
	 * @param id 主键
	 * @return
	 */
	AccountDTO selectAccount(BigDecimal id);

	/**
	 * 修改账号
	 *
	 * @param accountDTO 账号传输对象
	 */
	@Transactional
	void updateAccount(AccountDTO accountDTO);

	/**
	 * 修改账号最后登陆时间
	 *
	 * @param accountDTO 账号传输对象
	 */
	void updateLoginTime(AccountDTO accountDTO);
   
    /**
     * 更新上次登录时间
	 *
	 * @param accountPO 账号传输对象
	 */
	void updateAccountLastLoginTime(AccountPO accountPO);

	/**
	 * 查看账号列表
	 *
	 * @param accountQueryDTO 查询参数
	 * @return
	 */
	PagenationDataDTO<AccountDTO> selectPageAccount(AccountQueryDTO accountQueryDTO);

	/**
	 * 删除账号
	 *
	 * @param id 主键
	 */
	@Transactional
	void deleteAccount(BigDecimal id);

	/**
	 * 用户验证
	 *
	 * @param account
	 * @return
	 */
	AccountPO authentication(AccountPO account);

	/**
	 * 根据账号查询用户
	 *
	 * @param username 账号
	 * @return
	 */
	AccountPO selectByUsername(String username);

	/**
	 * 重置账号密码
	 *
	 * @param id 主键
	 */
	void wholeResetAccount(BigDecimal id);

	/**
	 * 查看账号
	 *
	 * @return
	 */
	AccountDTO selectCurrentAccount();

	/**
	 * 修改密码
	 *
	 * @param modifyPwdDTO
	 */
	void wholeModifyPwd(ModifyPwdDTO modifyPwdDTO);

	/**
	 * 获取当前登录用户
	 */
	String getCurrentLoginUser();
}
